﻿#pragma once
#include <cmath>
#include <iostream>
#include "CoordSys.h"
#include "TimeSys.h"

// 对流层延迟误差改正类
class TroposphericCorr
{
public:
    // 构造函数
    TroposphericCorr();
    TroposphericCorr(double temperature, double pressure, double humidity);

    // 析构函数
    ~TroposphericCorr();

    // 设置气象参数
    void set_meteorological_params(double temperature, double pressure,
        double humidity);

    // Saastamoinen模型对流层延迟改正（函数重载）
    double saastamoinen_corr(const XYZ& receiverPos, const XYZ& satPos);
    double saastamoinen_corr(double elevation, double height,
        double temperature, double pressure, double humidity);

    // 计算高度角
    double compute_elevation(const XYZ& receiverPos, const XYZ& satPos);

    // 测试函数
    void test(const XYZ& receiverPos, const XYZ& satPos);

private:
    // 气象参数
    double stationTemperature;  // 测站温度（开尔文）
    double stationPressure;     // 测站气压（毫巴）
    double stationHumidity;     // 测站湿度（%）

    // 坐标系统对象指针
    CoordSys* coordSys;

    // 计算水蒸气压
    double compute_water_vapor_pressure(double temperature, double humidity);

    // 计算干分量延迟
    double compute_dry_component(double elevation, double pressure,
        double temperature, double height);

    // 计算湿分量延迟
    double compute_wet_component(double elevation, double temperature,
        double waterVaporPressure);
};